package zl.core;

import com.baidu.aip.ocr.AipOcr;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;

class Recognition
{
/*

    //设置APPID/AK/SK
    public static final String APP_ID      = "10767511";
    public static final String API_KEY     = "mxPWgbVWMzylM5Le5RzF0q6i";
    public static final String SECRET_KEY  = "oNb3T6MRhVZm76GiHNfFKbL1DZV50TxE";

*/

    private static final String APP_ID     = "11777921";
    private static final String API_KEY    = "3d6aqYe0e7HO2ZfRzk5rfazM";
    private static final String SECRET_KEY = "mrTHpjoT1yEbqogxFLKZEgawKYWx9qbX";

/*

    private static final String  APP_ID     = "10847087";
    private static final String  API_KEY    = "GXrruGB4y8j1Lr58sI5FVQst";
    private static final String  SECRET_KEY = "ZtXrFMnwGNN3QKZXzuSTVTshlmV0nQHs";
*/



    private static String imagePath;
    private static String url;

    public  void setImage(String imagePath)    {        Recognition.imagePath = imagePath;    }
    public  void setUrl(String url) {
        Recognition.url = url;
    }
   // AipSpeech aipSpeech_client = new AipSpeech(APP_ID, API_KEY, SECRET_KEY);





    /**
     * 识别本地图片
     */
    public void basicGeneral() {
        // 初始化一个AipOcr
        AipOcr aipOcr_client = new AipOcr(APP_ID,API_KEY,SECRET_KEY);
        // 设置网络连接参数
        aipOcr_client.setConnectionTimeoutInMillis(2000);
        aipOcr_client.setSocketTimeoutInMillis(60000);

        // 传入参数调用接口
        HashMap<String, String> options = new HashMap<>();
        options.put("recognize_granularity", "big");
        options.put("language_type", "CHN_ENG");
        options.put("detect_direction", "true");
        options.put("detect_language", "true");
        options.put("vertexes_location", "true");
        options.put("probability", "true");

        //返回数据为Json格式
        JSONObject jsonRes = aipOcr_client.basicGeneral(imagePath, new HashMap<>());

//        //生成结果带文字位置信息的
//       JSONObject jsonRes = aipOcr_client.general(imagePath, new HashMap());
//
//        //识别结果带文字坐标信息
//        JSONObject jsonRes = aipOcr_client.accurateGeneral(imagePath, options);
//
//        //识别带生僻字的图片，需要充钱，放弃了~
//      JSONObject jsonRes = aipOcr_client.enhancedGeneral(imagePath, options);

        new SplitTools().getImageResult(jsonRes);
    }


    /**
     * 网络图片识别
     */
    public void basicGeneralUrl(){
        // 初始化一个AipOcr
        AipOcr aipOcr_client = new AipOcr(APP_ID,API_KEY,SECRET_KEY);
        // 设置网络连接参数
        aipOcr_client.setConnectionTimeoutInMillis(2000);
        aipOcr_client.setSocketTimeoutInMillis(60000);

        HashMap<String, String> options = new HashMap<>();
        options.put("language_type", "CHN_ENG");
        options.put("detect_direction", "true");
        options.put("detect_language", "true");
        options.put("probability", "true");

        // 通用文字识别, 图片参数为远程url图片
        JSONObject jsonRes = aipOcr_client.basicGeneralUrl(url, options);
        new SplitTools().getUrlImage(jsonRes);
    }

    /**
     * 识别银行卡
     */
    public void bankcard() {
        // 初始化一个AipOcr
        AipOcr aipOcr_client = new AipOcr(APP_ID,API_KEY,SECRET_KEY);
        // 设置网络连接参数
        aipOcr_client.setConnectionTimeoutInMillis(2000);
        aipOcr_client.setSocketTimeoutInMillis(60000);

        // 传入参数调用接口
        HashMap<String, String> options = new HashMap<>();

        // 本地图片路径
//        String imagePath = "images/bankCard.jpg";
        JSONObject jsonRes = aipOcr_client.bankcard(imagePath, options);

        new SplitTools().getBankCard(jsonRes);
    }

    /**
     * 识别身份证
     */
    public  void idcard() {
        // 初始化一个AipOcr
        AipOcr aipOcr_client = new AipOcr(APP_ID,API_KEY,SECRET_KEY);
        // 设置网络连接参数
        aipOcr_client.setConnectionTimeoutInMillis(2000);
        aipOcr_client.setSocketTimeoutInMillis(60000);

        // 传入参数调用接口
        HashMap<String, String> options = new HashMap<>();
        options.put("detect_direction", "false");
        options.put("detect_risk", "false");

        String idCardSide = "front";

        // 身份证照片路径
        JSONObject jsonRes = aipOcr_client.idcard(imagePath, idCardSide, options);

        //拆分Json数据
        new SplitTools().getIDCard(jsonRes);
    }



    /**
     * 识别table
     */
    public void excel_xls()
    {
        // 初始化一个AipOcr
        AipOcr aipOcr_client = new AipOcr(APP_ID,API_KEY,SECRET_KEY);
        // 设置网络连接参数
        aipOcr_client.setConnectionTimeoutInMillis(2000);
        aipOcr_client.setSocketTimeoutInMillis(60000);

        // 传入参数调用接口
        HashMap<String, String> options = new HashMap<>();
        Map<String, Object> resultMap=new HashMap<String, Object>();
        org.json.JSONObject jsonObj = new org.json.JSONObject();


        /*识别语言类型，默认为CHN_ENG。可选值包括：
        - CHN_ENG：中英文混合；
        - ENG：英文；
        - POR：葡萄牙语；
        - FRE：法语；
        - GER：德语；
        - ITA：意大利语；
        - SPA：西班牙语；
        - RUS：俄语；
        - JAP：日语；
        - KOR：韩语；
         */
        options.put("language_type", "CHN_ENG");
        //options.put("recognize_granularity", "big"); //是否定位单字符位置，big：不定位单字符位置，默认值；small：定位单字符位置
        //options.put("detect_direction", "true");  //是否检测图像朝向，默认不检测，即：false。朝向是指输入图像是正常方向、逆时针旋转90/180/270度。可选值包括:[- true：检测朝向；- false：不检测朝向]
        options.put("detect_language", "true");   //是否检测语言，默认不检测。当前支持（中文、英语、日语、韩语）
        //options.put("vertexes_location", "true"); //是否返回文字外接多边形顶点位置，不支持单字位置。默认为false
        //options.put("probability", "true");       //是否返回识别结果中每一行的置信度:[- true - false]

        //返回数据为Json格式
        // JSONObject jsonRes = aipOcr_client.basicGeneral(imagePath, new HashMap<>());

//        //生成结果带文字位置信息的
        /* JSONObject jsonRes = aipOcr_client.general(imagePath, new HashMap());*/
//
//     //识别结果带文字坐标信息
        JSONObject jsonRes = aipOcr_client.accurateGeneral(imagePath, options);
//
//        //识别带生僻字的图片，需要充钱，放弃了~
//      JSONObject jsonRes = aipOcr_client.enhancedGeneral(imagePath, options);

        new SplitTools().getImageResult(jsonRes);
    }


/*
*  提交图片
*  请求有次数限制
* */
    public void postTableXls()
    {
        // 初始化一个AipOcr
        AipOcr aipOcr_client = new AipOcr(APP_ID,API_KEY,SECRET_KEY);
        // 设置网络连接参数
        /*
        aipOcr_client.setConnectionTimeoutInMillis(2000);
        aipOcr_client.setSocketTimeoutInMillis(60000);
*/

        // 表格识别结果
        // 传入可选参数调用接口
        HashMap<String, String> options = new HashMap<>();// 传入参数调用接口
        //options.put("result_type", "json");
        options.put("result_type", "excel");

        // 异步接口
        JSONObject res = aipOcr_client.tableRecognitionAsync(imagePath, options);//1.上传，获取返回结果
        System.out.println(res.toString(2));
        String requestId = res.getJSONArray("result").getJSONObject(0).getString("request_id");//2.获取返回“request_id”下载地址
        System.out.println("request_id<=>[" + requestId+"]");
    }

    /*
    * 获取识别后的XLS下载地址
    * */
    public void getXls()
    {
        // 初始化一个AipOcr
        AipOcr aipOcr_client = new AipOcr(APP_ID,API_KEY,SECRET_KEY);
        // 设置网络连接参数
        /*
        aipOcr_client.setConnectionTimeoutInMillis(2000);
        aipOcr_client.setSocketTimeoutInMillis(60000);
*/

        // 表格识别结果
        // 传入可选参数调用接口
        HashMap<String, String> options = new HashMap<>();// 传入参数调用接口
        //options.put("result_type", "json");
        options.put("result_type", "excel");

        //request_id<=>[11777921_475466]
        String requestId = "11777921_475466";

        // 表格识别结果
        JSONObject res_xls = aipOcr_client.tableResultGet(requestId,options);
        System.out.println(res_xls.toString(1));

/*
        //使用封装的同步轮询接口
        JSONObject jsonres = aipOcr_client.tableRecognizeToJson(imagePath, 20000);
        System.out.println(jsonres.toString(2));*/
    }


}
